package controller;

import entity.Adesione;
import entity.Annuncio;
import entity.Articolo;
import entity.SitoAcquisti;
import entity.UtenteRegistrato;
import java.util.List;
import javax.ejb.Local;

/**
 * Metodi generici per la gestione degli annunci
 * @author ale
 */
@Local
public interface ControllerAnnunciLocal {

    /**
     * Restituisce il numero totale di annunci presenti nel sistema
     * @return il numero totale di annunci presenti nel sistema
     */
    public int numeroAnnunci();

    /**
     * Restituisce la lista di tutti gli annunci presenti nel sistema
     * @return la lista di tutti gli annunci presenti nel sistema
     */
    public List<Annuncio> tuttiGliAnnunci();

    /**
     * Recupera l'adesione di un utente a un certo annuncio
     * @param utenteLoggato utente di cui recuperare l'adesione
     * @param idAnnuncio id dell'annuncio di cui recuperare l'adesione
     * @return l'adesione se l'utente è iscritto all'annuncio, null altrimenti
     */
    public Adesione getAdesione(UtenteRegistrato utenteLoggato, Long idAnnuncio);

    /**
     * Recupera un'adesione a partire dal suo id
     * @param idAdesione id dell'adesione cercata
     * @return l'adesione corrispondente, null se non esiste un'adesione con tale id
     */
    public Adesione getAdesione(long idAdesione);

    /**
     * Recupera un annuncio a partire dal suo id
     * @param idAnnuncio id dell'annuncio cercato
     * @return l'annuncio corrispondete, null se non esiste un annuncio con tale id
     */
    public Annuncio getAnnuncio(long idAnnuncio);

    /**
     * Restituisce un sito a partire  dal suo url
     * @param urlSito url cercato
     * @return il sito corrispondente, se esiste; null altrimenti
     */
    public SitoAcquisti getSito(String urlSito);

    /**
     * Recupera un articolo a partire dal suo id
     * @param idArticolo id dell'articolo cercato
     * @return l'articolo cercato, se esiste; null altrimenti
     */
    public Articolo getArticolo(long idArticolo);

    /**
     * Recupera la lista di tutti gli annunci che scadono oggi
     * @return la lista di tutti gli annunci che scadono oggi
     */
    public List<Annuncio> annunciChiusi();
    
}
